package com.ec.service;

import com.ec.event.ECEvent;
import com.ec.event.ECEventListener;
import com.ec.event.ECEventType;

/**
 * 事件服务 提供事件的集中注册和分发
 * 
 * @ClassName: ECEventService.java
 * @Description: TODO()
 * @author 笑笑
 * @version V1.0
 * @Date 2014年4月15日 下午11:05:01
 */
public interface ECEventService {
	/***
	 * 注册自己感兴趣的事件到事件中心 如果该模块被卸载或者禁用了,请务必取消注册
	 * 
	 * @param intrestedEvents
	 *            感兴趣的事件ID，可以是多个
	 * @param listener
	 *            监听器
	 */
	public void register(ECEventType[] intrestedEvents, ECEventListener listener);

	/***
	 * 只注销已经注册特定的事件监听器
	 * 
	 * @param intrestedEvents
	 * @param listener
	 */
	public void unregister(ECEventType[] intrestedEvents,
			ECEventListener listener);

	/**
	 * 注销和指定监听器所有感兴趣的事件
	 * 
	 * @param listener
	 */
	public void unregister(ECEventListener listener);

	/***
	 * 广播一个事件，所有对这个感兴趣的监听器都会被调用
	 * 
	 * @param event
	 */
	public void broadcast(ECEvent event);

	/***
	 * 发出一个查询事件 如果某个模块可以响应这个查询事件，需要把结果放入事件的result属性，
	 * 或者以Key=>Value的形式放入dataMAP里，并且设置queryHandled为true
	 * @throws Exception 
	 */
	public Object query(ECEvent event) throws Exception;
}
